//
// Created by Administrator on 2021/10/20.
//
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <string>
#include <climits>

using namespace std;

class Solution {
public:
    int res;
    int n;
    /**
     * 要获取所有的子集  每个数字都可以选或者不选 共2^n种取法
     * @param val
     * @param idx
     * @param nums
     */
    void dfs(int val, int idx, vector<int> &nums) {
        if (idx == n) {
            // 终止递归
            res += val;
            return;
        }
        // 考虑选择当前数字
        dfs(val ^ nums[idx], idx + 1, nums);
        // 考虑不选择当前数字
        dfs(val, idx + 1, nums);
    }

    int subsetXORSum(vector<int> &nums) {
        res = 0;
        n = nums.size();
        dfs(0, 0, nums);
        return res;
    }
};


int main() {
    vector<int> nums{5, 1, 6};
    Solution solution;
    cout << solution.subsetXORSum(nums) << endl;
    return 0;
}
